package com.proxy.demo.jdk;

import java.lang.reflect.Proxy;

/**
 * 一般来说定义 JDK 动态代理分为三个步骤，如下所示
 *
 * 定义代理接口
 * 定义代理接口实现类
 * 定义动态代理调用处理器
 */
public class ProxyTest {

    public static void main(String[] args) {
        Proxy1 jdkClass = new Proxy1();
        MyInvocationHandler handler = new MyInvocationHandler(jdkClass);
        // Proxy为InvocationHandler实现类动态创建一个符合某一接口的代理实例
        //这里的proxyInstance就是我们目标类的增强代理类
        //newProxyInstance()
        //第一个参数：委托类的getClassLoader()
        //第二个参数：委托类的getInterfaces()
        //第三个参数：目标类的增强类

        // proxyInstance代理对象
        ProxyInterface proxyInstance = (ProxyInterface) Proxy.newProxyInstance(
                jdkClass.getClass().getClassLoader()
                ,jdkClass.getClass().getInterfaces()
                , handler);
        String add = proxyInstance.add();
        System.out.println(add);
        //打印增强过的类类型
//        System.out.println("=============" + proxyInstance.getClass());

    }
}
